home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Merciful 5
/
Merciful - Disc 5.iso
/
software
/
p
/
pcqpascalv1.2d.lha
/
Examples2
/
Scroller
/
Scroller.p
Wrap
Text File
|
1997-05-06
|
4KB
|
143 lines
Program Scroll;
{ Scroller V1.0 © 1994 by Andreas Tetzl
Dieses Programm ist Freeware.
Sie können es verwenden, solange mein Name erwähnt wird.
Andreas Tetzl
Liebethaler Str.18
01796 Pirna
Tel. 03501/523854
}
{$I "Include:Intuition/Intuition.i"}
{$I "Include:Graphics/Graphics.i"}
{$I "Include:Exec/Libraries.i"}
{$I "Include:Graphics/Pens.i"}
{$I "Include:Graphics/Text.i"}
{$I "Include:Graphics/Blitter.i"}
{$I "Include:Graphics/View.i"}
{$I "Include:Utils/StringLib.i"}
{$I "Include:Libraries/DOS.i"}
CONST
BMWIDTH = 640; { Der zu scrollende Bereich sollte so klein wie möglich sein,
{ daß geht noch schneller. }
BMHEIGHT = 490+200; { Zeilen*10+Höhe des Screens }
Topaz : TextAttr = ("topaz.font",8,FS_NORMAL,FPB_ROMFONT);
ns : NewScreen = (0,0,640,200,1,0,1,HIRES,CUSTOMSCREEN_f,NIL,NIL,NIL,NIL);
nw : NewWindow = (0,0,640,200,0,1,0,BORDERLESS+ACTIVATE+RMBTRAP,
NIL,NIL,NIL,NIL,NIL,0,0,0,0,CUSTOMSCREEN_F);
MyText : Array[1..49] of String =(
"","","","","","","","","","","","","","","","","","","","","","","",
"Scroller V1.0 © 1994 by Andreas Tetzl","","","","",
"Dieser Scroller benutzt die Blitterbefehle der",
"Graphics.Library.",
"Der Text wird in eine große Bitmap geschrieben,",
"und dann in die Bitmap des Screen geblittet.",
"Es ist auch möglich Grafik zu scrollen, aber",
"bei mehr Farben fängt's an zu ruckeln.",
"","","","","",
"Grüße gehen an","","",
"Diesel",
"und",
"Andreas Neumann",
"","","","");
Colors : Array[1..2] of Short = ($0,$FFF); { Schwarz, Weiß }
VAR Scr : ScreenPtr;
Win : WindowPtr;
RP, RP2 : RastPortPtr;
BM, BM2 : BitMapPtr;
VP : ViewPortPtr;
i, BitPlanes: Integer;
TopazFont : TextFontPtr;
PROCEDURE CleanExit(Why : String; RC : Integer);
BEGIN
IF BM2^.Planes[0]<>NIL THEN FreeRaster(BM2^.Planes[0],BMWIDTH,BMHEIGHT);
IF Win<>NIL THEN CloseWindow(Win);
IF Scr<>NIL THEN CloseScreen(Scr);
IF TopazFont<>NIL THEN CloseFont(TopazFont);
IF GfxBase<>NIL THEN CloseLibrary(GfxBase);
IF Why<>NIL THEN Writeln(Why);
Exit(RC);
END;
Function LeftMouseButton: Boolean;
Type
bt = ^Byte;
Var
bfe : bt;
Begin
bfe := Address($bfe001);
If (bfe^ MOD 128) > 64 { bit 6 gesetzt ? }
then LeftMouseButton := False { ja -> nicht gedrückt }
else LeftMouseButton := True; { nein -> lmb gedrückt }
end;
BEGIN
GfxBase:=OpenLibrary("graphics.library",0);
IF GfxBase=NIL THEN CleanExit("Kann Gfx.lib nicht öffnen",10);
Scr:=OpenScreen(adr(ns));
IF Scr=NIL THEN CleanExit("Kann Screen nicht öffnen",10);
VP:=adr(Scr^.SViewPort);
LoadRGB4(VP,adr(Colors),2);
nw.Screen:=Scr;
Win:=OpenWindow(adr(nw));
IF WIn=NIL THEN CleanExit("Kann Window nicht öffnen",10);
BM:=adr(Scr^.SBitMap);
RP:=adr(Scr^.SRastPort);
TopazFont:=OpenFont(adr(Topaz));
IF TopazFont=NIL THEN CleanExit("Kann Topaz.Font nicht öffnen",10);
New(BM2);
InitBitMap(BM2,1,BMWIDTH,BMHEIGHT);
BM2^.Planes[0]:=AllocRaster(BMWIDTH,BMHEIGHT);
IF BM2^.Planes[0]=NIL THEN CleanExit("Nicht genug Speicher für Bitmap",10);
New(RP2);
InitRastPort(RP2);
RP2^.BitMap := BM2;
SetFont(RP2,TopazFont);
SetRast(RP2,0);
{ Text in Bitmap schreiben }
For i:=1 to 49 do
BEGIN
Move(RP2,(BMWidth/2)-(TextLength(RP2,MyText[i],StrLen(MyText[i]))/2),i*10);
GText(RP2,MyText[i],StrLen(MyText[i]));
END;
{ Scrollen }
REPEAT
For i:=1 to BMHEIGHT-200 do
BEGIN
BitPlanes:=BltBitMap(BM2,0,i,BM,0,0,BMWIDTH,Scr^.Height,$C0,%00000001,NIL);
{ Versuchen Sie mal einen sehr kleinen Bereich zu scrollen (z.B. 100*100) }
IF LeftmouseButton THEN CleanExit(NIL,0);
{ Wenn das Scrolling zu schnell ist, dann müssen Sie hier
warten. Delay(1) dauert zu lange, benutzen Sie WaitTimer() aus
Include:Utils/TimerUtils (Demo in Examples/TimerTest.p) }
END;
UNTIL FALSE;
END.